home *** CD-ROM | disk | FTP | other *** search
- /* Program EX_0805.C
- Listing 17C - see documentation in TUTOR.SSS
- */
-
- #include "SSSC.H"
-
- #define ARRIVL 1
- #define STARTA 2
- #define ENDACT 3
- #define NEXTAC 4
- #define REPORT 5
-
- #define TIMEL 120
- #define REPTME -1
- #define SSIZE 4
-
- #define signal printf("Simulated time %6.2f\x1b[79D",T())
-
- int n, countr, server, ecode;
-
- void prime()
- {
- n = 0;
- countr = 0;
- server = 1;
- INIQUE(1, 1, 1);
- INISTA(1,"bus", 1, 0, 0, 0);
- TALLY(1, server);
- CREATE(0, n);
- CREATE(TIMEL, REPTME);
- }
-
- main()
- {
- prime();
-
- do
- {
- if ((ecode = NEXTEV()) > 0)
- switch(ecode)
- {
-
- case ARRIVL :
- if (IDE() == REPTME) SCHED(0, REPORT, IDE());
- else
- {
- n = n + 1;
- signal;
- SETA(1, EX(0.9));
- CREATE(EX(1), n);
- SCHED(0, NEXTAC, IDE());
- }
- break;
-
- case NEXTAC :
- if (server) SCHED(0, STARTA, IDE());
- else QUEUE(1, 0);
- break;
-
- case STARTA :
- SCHED(A(1), ENDACT, IDE());
- server = server - 1;
- TALLY(1,server);
- break;
-
- case ENDACT :
- DISPOS();
- server = server + 1;
- TALLY(1, server);
- if (NQ(1))
- {
- REMVFQ(1,1);
- SCHED(0, STARTA, IDE());
- }
- break;
-
- case REPORT :
- SCHED(TIMEL, REPORT, IDE());
- if (countr == 0)
- printf("# average avail.s \n");
- else
- printf("%1d%8.1f%8.3f \n",
- countr, QAVG(1), SAVG(1));
- CLEARQ(1);
- CLEARS(0);
- countr = countr + 1;
- if (countr > SSIZE) SIMEND(0);
- break;
-
- }
- } while(ecode);
- }